Android json解析 带有自定义泛型参数的bean 您所在的位置:网站首页 json 泛型解析 Android json解析 带有自定义泛型参数的bean

Android json解析 带有自定义泛型参数的bean

#Android json解析 带有自定义泛型参数的bean| 来源: 网络整理| 查看: 265

不多说,上代码:

这是最外层的一个bean

public class TestJsonVo implements Serializable { private T data; public T getData() { return data; } public void setData(T data) { this.data = data; } @Override public String toString() { return "TestJsonVo [data=" + data + "]"; } }

 

public class TestJsonTemp { private List list; public List getList() { return list; } public void setList(List list) { this.list = list; } @Override public String toString() { return "TestJsonTemp [list=" + list + "]"; } }

 

 

public class TestJsonListObj { private String test1; private String test2; public String getTest1() { return test1; } public void setTest1(String test1) { this.test1 = test1; } public String getTest2() { return test2; } public void setTest2(String test2) { this.test2 = test2; } @Override public String toString() { return "TestJsonListObj [test1=" + test1 + ", test2=" + test2 + "]"; } }

    

public static void main(String[] args) { TestJsonVo testJson = new TestJsonVo(); TestJsonTemp data = new TestJsonTemp(); ArrayList list = new ArrayList(); TestJsonListObj e = new TestJsonListObj(); e.setTest1("111111111111"); e.setTest2("111111111111"); list.add(e); data.setList(list); testJson.setData(data); String json = JSON.toJSONString(testJson); System.out.println(json);

  打印结果:{"data":{"list":[{"test1":"111111111111","test2":"111111111111"}]}} 没问题

 

  然后再把{"data":{"list":[{"test1":"111111111111","test2":"111111111111"}]}}转为Object:

TestJsonVo obj= JSON.parseObject(json, TestJsonVo.class); System.out.println(obj);

 结果为:TestJsonVo [data={"list":[{"test1":"111111111111","test2":"111111111111"}]}]  很明显data对象根本没转过来 ,而且obj.getData().getList() 会报java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to testFastjson.TestJsonTemp

 

后来用TypeReference试了一下 再java下没问题,但是放到Android上的时候还是报java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to testFastjson.TestJsonTemp :

TestJsonVo parseObject = JSON.parseObject(json, new TypeReference() { }.getType()); System.out.println(parseObject.toString()); System.out.println(parseObject.getData().toString());

 

我换Gson试了一下,可以了

 

public static void main(String[] args) { TestJsonVo testJson = new TestJsonVo(); TestJsonTemp data = new TestJsonTemp(); ArrayList list = new ArrayList(); TestJsonListObj e = new TestJsonListObj(); e.setTest1("111111111111"); e.setTest2("111111111111"); list.add(e); data.setList(list); testJson.setData(data); Gson gson = new Gson(); String json = gson.toJson(testJson); System.out.println(json); TestJsonVo fromJson = gson.fromJson(json, new TypeToken(){}.getType()); System.out.println(fromJson); }

 

输出:{"data":{"list":[{"test1":"111111111111","test2":"111111111111"}]}}

TestJsonVo [data=TestJsonTemp [list=[TestJsonListObj [test1=111111111111, test2=111111111111]]]]

 

 

 

 

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有